package controller

import (
	"RocFamilySystem/internal/service"
	"RocFamilySystem/models"
	"RocFamilySystem/pkg/constant"
	"fmt"
	"github.com/gin-gonic/gin"
	"strconv"
	"strings"
)

type GeneratorTemplateController struct {
	BaseController
	GeneratorTemplateService *service.GeneratorTemplateService
}

// 初始化
func init() {
	registerContainer["GeneratorTemplateController"] = &GeneratorTemplateController{}
}

// SetService 设置服务
func (controller *GeneratorTemplateController) SetService(sysGeneratorTemplateService *service.GeneratorTemplateService) {
	controller.GeneratorTemplateService = sysGeneratorTemplateService
}

// RegisterRouter 注册路由
func (controller *GeneratorTemplateController) RegisterRouter(engine *gin.Engine) {
	prefix := "/generator/template"
	g := engine.Group(prefix)
	prefixPermission := "permission" + strings.ReplaceAll(prefix, "/", ":")
	{
		g.POST("", controller.AddGeneratorTemplate)
		registerPermissionContainer("新增生成模板", prefixPermission+":create", prefix, "POST")
		g.DELETE("/:id", controller.RemoveGeneratorTemplate)
		registerPermissionContainer("删除ID生成模板", prefixPermission+":delete", prefix, "DELETE")
		g.PUT("", controller.ModifyGeneratorTemplate)
		registerPermissionContainer("修改生成模板", prefixPermission+":update", prefix, "PUT")
		g.POST("/list", controller.QueryGeneratorTemplate)
		registerPermissionContainer("查找生成模板列表", prefixPermission+":list", prefix, "POST")
		g.GET("/:id", controller.QueryGeneratorTemplateById)
		registerPermissionContainer("ID查找生成模板", prefixPermission+":id", prefix, "GET")
	}
}

// AddGeneratorTemplate 添加生成模板
// @Summary AddGeneratorTemplate 添加生成模板
// @Tags 生成模板
// @Produce json
// @Param sysGeneratorTemplate body models.GeneratorTemplate true "生成模板"
// @Success 200 {object} Result "成功"
// @Router /generator/template [post]
func (controller *GeneratorTemplateController) AddGeneratorTemplate(ctx *gin.Context) {
	var sysGeneratorTemplate models.GeneratorTemplate
	err := ctx.ShouldBind(&sysGeneratorTemplate)
	controller.HandleError(err, constant.PARAMS_ERROR)
	controller.GeneratorTemplateService.AddGeneratorTemplate(&sysGeneratorTemplate)
	controller.CustomResult(ctx, 200, "添加生成模板成功", nil)
}

// RemoveGeneratorTemplate 删除生成模板
// @Summary RemoveGeneratorTemplate  删除生成模板
// @Tags 生成模板
// @Produce json
// @Param id path int true "生成模板id"
// @Success 200 {object} Result "成功"
// @Router /generator/template/:id [delete]
func (controller *GeneratorTemplateController) RemoveGeneratorTemplate(ctx *gin.Context) {
	sysGeneratorTemplateId, err := strconv.Atoi(ctx.Param("id"))
	controller.HandleError(err, constant.PARAMS_ERROR)
	controller.GeneratorTemplateService.RemoveGeneratorTemplate(sysGeneratorTemplateId)
	controller.CustomResult(ctx, 200, fmt.Sprintf("删除【%d】成功", sysGeneratorTemplateId), nil)
}

// ModifyGeneratorTemplate 修改生成模板
// @Summary ModifyGeneratorTemplate 修改生成模板
// @Tags 生成模板
// @Produce json
// @Param sysGeneratorTemplate body models.GeneratorTemplate true "生成模板"
// @Success 200 {object} Result "成功"
// @Router /generator/template [put]
func (controller *GeneratorTemplateController) ModifyGeneratorTemplate(ctx *gin.Context) {
	var sysGeneratorTemplate models.GeneratorTemplate
	err := ctx.ShouldBind(&sysGeneratorTemplate)
	controller.HandleError(err, constant.PARAMS_ERROR)
	controller.GeneratorTemplateService.ModifyGeneratorTemplate(&sysGeneratorTemplate)
	controller.CustomResult(ctx, 200, fmt.Sprintf("修改【%d】成功", *sysGeneratorTemplate.Id), nil)
}

// QueryGeneratorTemplate 查询生成模板
// @Summary QueryGeneratorTemplate 修改生成模板
// @Tags 生成模板
// @Produce json
// @Param sysGeneratorTemplate body models.GeneratorTemplate true "生成模板"
// @Success 200 {object} Result "成功"
// @Router /generator/template [get]
func (controller *GeneratorTemplateController) QueryGeneratorTemplate(ctx *gin.Context) {
	pageNum, pageSize := controller.GetPageInfo(ctx)
	var sysGeneratorTemplate models.GeneratorTemplate
	err := ctx.ShouldBind(&sysGeneratorTemplate)
	controller.HandleError(err, constant.PARAMS_ERROR)
	data := controller.GeneratorTemplateService.QueryGeneratorTemplate(&sysGeneratorTemplate, pageNum, pageSize)
	controller.SuccessResult(ctx, data)
}

// QueryGeneratorTemplateById 查询生成模板通过ID
// @Summary QueryGeneratorTemplateById  查询生成模板通过ID
// @Tags 生成模板
// @Produce json
// @Param id path int true "生成模板id"
// @Success 200 {object} Result "成功"
// @Router /generator/template/:id [get]
func (controller *GeneratorTemplateController) QueryGeneratorTemplateById(ctx *gin.Context) {
	sysGeneratorTemplateId, err := strconv.Atoi(ctx.Param("id"))
	controller.HandleError(err, constant.PARAMS_ERROR)
	data := controller.GeneratorTemplateService.QueryGeneratorTemplateById(sysGeneratorTemplateId)
	controller.SuccessResult(ctx, data)
}
